#include <iostream>
using namespace std;


class Person
{
public:
  Person();
  Person(char* name, int age);
  ~Person();
  void say();
  void say2();
private:
  char* name;
  int age;
};

int main(int argc, char const *argv[])
{
  // 错误，new int 返回的是 int*，不能使用 int 来接收。
  // int p = new int;
  // printf("%d\n", p);

  // int *p = new int(123);
  // printf("%d\n", p); // 每次都不一样；
  // printf("%d\n", *p); // 可以，总是 123；

  // int *p = new int();
  // printf("%d\n", p); // 每次都不一样；
  // printf("%d\n", *p); // 可以，总是 0；
  
  // 没有小括号
  // int *p = new int;
  // printf("%d\n", p); // 每次都不一样；
  // printf("%d\n", *p); // 可以，每次都不一样；而且，*p 总是比 p 大432，怎么会这么神奇~
  
  
  
  char name[] = "lucy";
  // char* name[] = 
  // char* name = &namee;
  int age = 14;
  
  // Person* p = new Person(name, age);
  // p->say(); // new 的必须使用 -> 操作符；
  // p.say(); // new 的不能使用 . 操作符；

  // Person p2("hah", 11); // 有个warning；
  // Person p2(['h', 'a', 'h', '\0'], 11); // 不行；
  Person p2(name, age); // 完美；
  p2.say(); // 可以；由此可知，this 是指向当前对象的指针。
  // p2.say2(); // 可以；
  // p2->say2(); // 不行；

  return 0;
}



Person::Person() {}
Person::Person(char* name, int age) {
  this->name = name;
  this->age = age;
}
Person::~Person() {
  cout << "destroy " << this->name << endl;
}
void Person::say() {
  cout << this->name << " is " << this->age << " years old." << endl;
}
void Person::say2() {
  cout << "18 years old." << endl;
}